Attribute VB_Name = "模块1" '2023-07-19编写完成第1版 Sub xxx() Dim rng As Range Dim paragraph As String Dim strDate As String Dim result As String Dim strSearch As String Dim isIndentation As Boolean '判断这一段是否缩进 strSearch = InputBox("输入搜索内容:", , "项目A") isIndentation = False ' 设置搜索范围为整个文档 Set rng = ActiveDocument.content ' 遍历每个段落 For Each para In rng.Paragraphs '判断是否有缩进 If para.FirstLineIndent <> 0 And isIndentation = True Then ' 如果这一段有缩进,并且isIndentation是真,那么就说明这一段是需要的内容 result = result & "□" & para.Range.Text '下一段还需要继续判断是否缩进,所以设置成真。 isIndentation = True GoTo 100 '跳过这个循环的其余部分,判断下一段(防止缩进文本中也有搜索关键词导致内容重复) Else '如果这一段没有缩进,或者isIndentation是假,那么就设置 isIndentation = False End If ' 判断段落是否包含“日”、“月” If InStr(para.Range.Text, "日") > 0 And InStr(para.Range.Text, "月") > 0 _ And InStr(para.Range.Text, "周") > 0 Then ' 将满足条件的段落保存到结果变量中 strDate = Left(para.Range.Text, 9) & vbCrLf End If '搜索关键字 If InStr(para.Range.Text, strSearch) > 0 Then result = result & strDate & para.Range.Text strDate = "" '将strdate设置为空,因为在某个日期下可能存在多个结果,不设置成空就会每一个结果带一个日期。 isIndentation = True '这里搜索到了目标文本,需要在下一段判断是否是缩进,若是缩进的,那么也是目标文本。 End If 100 Next para ' 将文本复制到剪贴板 With New DataObject .SetText result .PutInClipboard End With MsgBox result MsgBox "完成!查询结果已复制到剪贴板。", , "完成" End Sub